<?php
/**
 * Author: LaiGuiming
 * Time: 2017-11-30 17:15:45
 * Copyright (C) 2016 Longyan Wehome Message CO.,LTD.
 */

namespace app\admin\controller\sys;
use app\common\controller\BackEnd;
use think\Image;
use app\admin\model\User;

/**
 * 文件控制器
 * Class File
 * @package app\admin\controller
 */
class File extends BackEnd
{
    protected $model;//模型对象
    protected $modelName;//模型名称
    protected $explain;//说明

    public function _initialize()
    {
        parent::_initialize();
        $this->model=D("file");
        $this->modelName="File";
        $this->explain="文件";
    }

    /**
     * 默认生成的控制器所继承的父类中有index/add/save/del/loadData五个方法
     * 因此在当前控制器中可不用编写增删改查的代码,如果需要自己控制这部分逻辑
     * 需要将app/admin/lib/traits/Crud.php中对应的方法复制到当前控制器,然后进行修改
     */

    /**
     * 获取分页数据
     * @param int $limit
     * @param int $offset
     */
    public function loadData($limit = 10,$offset=0)
    {
        $where="status!=2";
        $where=$this->getCondition($where,"name","like");
        $type=input("type");
        if ($type != -1) {
            $where=$where." and " . cache($type);
        }
        $counts=$this->model->where($where)->count();
        $data=$this->model->where($where)->order('ct desc')->limit($offset,$limit)->select();
        $res = array("rows" => $data, "total" => $counts);
        echo json_encode($res);
    }

    public function getContent($path)
    {
        $content = file_get_contents(APP_PATH . ".." . $path);
        //中文乱码处理
        $content=iconv("gb2312", "utf-8//IGNORE",$content);
        $this->resSuccess($content);
    }

    /**
     * 单图上传
     */
    public function uploadImage()
    {
        // 获取表单上传文件
        $file = request()->file('file_data');
        $result = "success";
        // 移动到框架应用根目录/public/upload/ 目录下
        $local_path = ROOT_PATH . 'upload' . DS . 'media';
        $path = DS . 'upload' . DS . 'media' . DS;
        $info = $file->move($local_path);
        if ($info) {
            //保存附件
            //获取文件信息
            $file_path = $path . $info->getSaveName();
            $file_path = str_replace('\\', '/', $file_path);
            //文件后缀
            $suffix=strstr( $file_path, '.');
            $file_info = $info->getInfo();
            //大小转换
            $size = format_bytes($file_info['size']);

            $item = [
                'name' => $file_info['name'],
                'type' => $file_info['type'],
                'about' => '来源：单图上传',
                'path' => $file_path,
                'size' => $size,
                'suffix' => $suffix
            ];
            $this->model->save($item);
        } else {
            $result = "fail";
            $file_path="";
        }

        $res = array("result" => $result, "path" => $file_path);
        echo json_encode($res);
    }

    /**
     * 附件上传
     */
    public function upload()
    {
        // 获取表单上传文件
        $files = request()->file('file');
        if (empty($files)) {
            //文件为空，上传失败
            $this->resData(false);
        }
        $result = true;
        // 移动到框架应用根目录/public/upload/ 目录下
        $media_path=cache("media_path");
        $local_path = ROOT_PATH .$media_path;
        $path = DS . $media_path . DS;

        $list = Array();
        $index = 1;
        foreach ($files as $file) {
            $info = $file->move($local_path);
            if ($info) {
                //获取文件信息
                $file_path = $path . $info->getSaveName();
                $file_path = str_replace('\\', '/', $file_path);
                //文件后缀
                $suffix=strstr( $file_path, '.');
                $file_info = $info->getInfo();
                //大小转换
                $size = format_bytes($file_info['size']);
                $item = [
                    'name' => $file_info['name'],
                    'type' => $file_info['type'],
                    'about' => $_POST['about'],
                    'path' => $file_path,
                    'size' => $size,
                    'suffix' => $suffix
                ];
                Array_push($list, $item);
                $index = $index + 1;
            } else {
                $result = false;
            }
        }

        $this->model->saveAll($list);

        $this->resData($result);
    }

    /**
     * 修改头像图片
     */
    public function headUpload($id = -1)
    {
        header('Content-Type: text/html; charset=utf-8');
        $result = array();
        $result['success'] = false;
        $successNum = 0;
        $i = 0;
        $msg = '';
        //上传目录
        $dir = ROOT_PATH . 'upload' . DS . 'media' . DS . date("Ymd") . DS;
        mkdirs($dir);
        $res_dir = DS . 'upload' . DS . 'media' . DS . date("Ymd") . DS;
        //遍历所有文件域
        while (list($key, $val) = each($_FILES)) {
            if ($_FILES[$key]['error'] > 0) {
                $msg .= $_FILES[$key]['error'];
            } else {
                $fileName = floor(microtime() * 1000) . '_' . createRandomCode(8);
                //处理原始图片（默认的 file 域的名称是__source，可在插件配置参数中自定义。参数名：src_field_name）
                //如果在插件中定义可以上传原始图片的话，可在此处理，否则可以忽略。
                if ($key == '__source') {
                    //当前头像基于原图的初始化参数，用于修改头像时保证界面的视图跟保存头像时一致。帮助提升用户体验度。修改头像时设置默认加载的原图的url为此图片的url+该参数即可。
                    $initParams = $_POST["__initParams"];
                    $virtualPath = $dir . "head_source_$fileName.jpg";
                    $headPath = $res_dir . "head_source_$fileName.jpg";
                    $result['sourceUrl'] = $headPath . $initParams;
                    move_uploaded_file($_FILES[$key]["tmp_name"], $virtualPath);
                    /*
                        可在此将 $result['sourceUrl'] 储存到数据库
                    */
                    $successNum++;
                } //处理头像图片(默认的 file 域的名称：__avatar1,2,3...，可在插件配置参数中自定义，参数名：avatar_field_names)
                else if (strpos($key, '__avatar') === 0) {
                    $virtualPath = $dir . "head_$fileName.jpg";
                    $headPath = $res_dir . "head_$fileName.jpg";
                    $result['avatarUrls'][$i] = $headPath;
                    move_uploaded_file($_FILES[$key]["tmp_name"], $virtualPath);

                    //头像压缩成64宽
                    $image = Image::open($virtualPath);
                    $width = $image->width();
                    if ($width > 64) {
                        $image->thumb(64, 64)->save($virtualPath);
                    }
                    /*
                        可在此将 $result['avatarUrls'][$i] 储存到数据库
                    */
                    $successNum++;
                    $i++;

                    //修改用户头像
                    $model = new User();
                    $model->update(['id' => $id, 'head_img' => $headPath]);

                    //获取图片大小
                    $fCont = file_get_contents($virtualPath);
                    $size = format_bytes(strlen($fCont));
                    $item = [
                        'name' => $fileName,
                        'type' => $image->type(),
                        'about' => '来源：头像图片',
                        'path' => $headPath,
                        'size' => $size,
                        'suffix' => '.jpg'
                    ];
                    $this->model->save($item);

                    //用户头像session
                    session('head_img', $headPath);
                }
            }
        }
        $result['msg'] = $msg;
        if ($successNum > 0) {
            $result['success'] = true;
        }
        //返回图片的保存结果（返回内容为json字符串）
        print json_encode($result);
    }

    /**
     * 删除
     * @param string $id
     */
    public function del($id = '')
    {
        //TODO 暂不做文件删除
        /*$ids=explode(',', $id);
       $datas = $this->model->all($ids);
       foreach($datas as $data){
           $path = dirname(APP_PATH) . $data['path'];
           //删除文件
           unlink($path);
       }*/

        //删除数据
        $this->model->where('id in ('.$id.')')->update(['status' => 2]);
        $this->resSuccess();
    }
}